from urllib.parse import urljoin
import re

# order 函数的作用：接收一个列表，返回一个新的列表，其中每个元素是一个元组，包含元素的索引和值。
def order(items):
    new_items = [(i, item) for i, item in enumerate(items)]
    return new_items


# arr = ['apple', 'banana', 'orange', 'pear']
# arr = [(1, 'apple'), (2, 'banana'), (3, 'orange'), (4, 'pear')]

# id_data 函数的作用：接收一个列表，返回一个字典，其中包含两个键值对，'id'和'data'。'id'对应的值是一个列表，包含元素的索引；'data'对应的值是一个列表，包含元素的值。
def id_data(items):
    indexs, datas = zip(*items)
    index = list(indexs)
    data = list(datas)
    return {
        'id': index,
        'data': data
    }

# uel_add 函数的作用：接收一个字符串和列表，返回一个列表，其中每个元素是字符串和列表中元素的组合。
def url_add(url_top, url_list):
    return [urljoin(url_top, url) for url in url_list]

# headers_dict 函数：接收在页面中复制的请求头信息，返回字典，
def headers_dict(text: str) -> dict:
    lines = [line.strip() for line in text.strip().splitlines() if line.strip()]
    request_headers = {}
    for key, value in zip(lines[::2], lines[1::2]):
        # 过滤以 : 开头（非法）或不是合法 HTTP header 的键
        if key.startswith(":"):
            continue
        if not re.fullmatch(r"[A-Za-z0-9\-]+", key):
            continue
        request_headers[key] = value
    return request_headers